// Grunt 的入口文件
// 用于定义一些需要Grunt自动执行的任务
// 需要导出一个函数
// 此函数接收一个 grunt 的形参， 内部提供一些创建任务时可以用到的API

// 1.安装
// 1.1: 打开空文件夹： yarn init --yes 
// 1.2：安装Grunt： yarn add grunt
// 1.3: 添加grunt入口文件： code gruntfile.js

// 标记任务失败
// 方法内部retrue false 继续任务 --force

// 插件使用：
// 1. npm/yarn安装插件
// 2. grunt.loadNpmTasks('grunt-xx-xx')引用插件
// 3. 在grunt。initConfig中配置插件任务
module.exports = grunt => {
    // Grunt 多任务目标
    grunt.initConfig({
        build: {
            options: {
                foo: 'bar'
            },
            css: {
                options: {
                    foo: 'bax'
                }
            }, 
            js: 2，
            clean： {
                temp: 'temp/**' // 文件目录， 删除所有temp下子目录
            }
        }
    })
    // 插件引入
    grunt.loadNpmTasks('grunt-contrib-clean')


    // 多目标模式， 可以让任务根据配置形成多个子任务
    // yarn grunt build 会依次执行 css，js任务， options为选配，css内部的options会覆盖外层options
    // yarn grunt build:css 可以执行多任务中的指定任务css
    grunt.registerMultiTask('build', function（）{
        console.log(this.options());
        console.log(`target: ${this.target}, data: ${this.data}`);
    })
    /*
    // grunt 配置
    grunt.initConfig({
        obj: 'a1',
        bb: {
            a2: 123
        }
    })
    grunt.registerTask('cc', () => {
        console.log(grunt.config(obj), grunt.config('bb.a2'));
    })
    */
    // yarn grunt foo
    grunt.registerTask('foo', () => {
        console.log('hello grunt');
        return false
    })

    grunt.registerTask('bar', '任务描述'，() => {
        console.log('ohter task~');
    })
    // 默认执行方法  yarn grunt
    grunt.registerTask('default', () => {
        console.log('default task~');
    })
    // 默认执行方法  yarn grunt 执行 foo， bar 两个方法
    grunt.registerTask('default', ['foo', 'bar'])

    // 异步执行， 不能用箭头函数
    grunt.registerTask('async-task', function () {
        const done = this.async()
        setTimeout(() => {
            console.log('async task working~');
            // 结束执行
            done()
        }, 1000)
    })
}